内存与cache一致性问题 您所在的位置:网站首页 一文读懂Cache一致性原理 内存与cache一致性问题

内存与cache一致性问题

2024-06-01 22:24| 来源: 网络整理| 查看: 265

很不错的一篇文章,mark一下: 使用Xilinx SDK对Zynq的PCIE,SRIO等高速接口进行调试的过程中,经常会涉及到DMA对DDR数据的读写,此时就会引入会引入cache一致性问题。Zynq的PS在运行过程中,通过DDR控制器对DDR存储器进行访问,为了加快访问速度,常常将一些数据缓存在cache中,而且不是针对一个数据数据缓存,而是一批(Xilinx称为一行,即line,一行长度为32),这样的好处是下次访问速度会加快,但是坏处也很明显,cache数据发生变化,不能马上反映到DDR中,反之亦然。当通过DMA修改DDR数据时,CPU可能还不知道发生了什么,拿到的数据还是cache中没有修改的数据,导致读写数据的错误。

解决的办法有以下两种:

调试过程中,直接禁用cache,即使用Xil_DCacheDisable();CPU将直接访问DDR内存,读写都是直接的,这会降低CPU性能,但简化了数据传输操作,属于极端方法。使用CacheFlush和Cache Invalidate操作,CacheFlush把Cache里的数据清空,将Cache内容推到DDR中;而Cache Invalidate表示当场宣布Cache内容无效,需要从DDR中重新加载数据,即把数据从DDR中拉到Cache中。 Xil_DcacheFlushRange((u32)sendram,sizeof(buffer)); //将内容刷新至DDR Xil_DcacheInvalidRange((u32)recvram,sizeof(buffer)); //将DDR内容拉近Cache中 #include "xil_cache.h" //上述函数头文件


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有